// 引入axios
import {ref} from "vue"
import axios from "axios"
import { ElMessageBox } from 'element-plus'
import router from "@/router"
import NProgress from "nprogress"
import 'nprogress/nprogress.css'
// export let aaa  = ref()

// 配置axios
let http = axios.create({
    // 基础地址
    baseURL:'/api',
    // 超时设置
    timeout:1000*10,
    // 是否携带凭据
    withCreadentials:true,
})


// 配置拦截器
    // config是每个请求的对象
    // 请求拦截器,所有的axios请求都会被请求拦截器拦截，可以通过拦截器添加额外的配置
    http.interceptors.request.use(config =>{
        // 获取token
        NProgress.start()
        let token = sessionStorage.getItem('myx-token')
        config.headers.authorization = token
        return config
    })

    // 响应拦截器，搜有的axios响应都会被响应拦截器拦截，可以对拦截的响应进行额外的配置
    http.interceptors.response.use(config =>{
        NProgress.done()
        // config使每个请求响应的结果，所有的请求都要经过这道门，才能到组件那
        if(config.data.state){
            // 正常响应
            return config
        }else{
            // 不需要弹窗提示的路径 
            let excludePaths = ["/sms/send","/order/query_order_status"];

            // 如果excludePaths不包含

            if(!excludePaths.includes(config.config.url)){
                // 响应错误
                ElMessageBox.alert(config.data.msg,"错误提示",{type:"error"})
            }
            
            // 判断登录失效的情况，10022(登入状态过期) 1004(token失效了)前后端约定的状态码，并不是http的状态吗
            if(config.data.code==='10022' || config.data.code==='1004'){
                // 退到登录页，清除掉token
                sessionStorage.removeItem('myx-token')
                router.push('/login')
                // 刷新页面，清掉缓存
                location.reload()
            }


            // console.log('fgklk;',config);
            // aaa.value = config
            return Promise.reject(config.data.msg)
        }
        
    })

export default http